package JackSu.java01;

import java.util.Scanner;

//断言
public class AssertTest {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.println("Enter n:");
        int n = in.nextInt();
        //抛出一个异常会让代码一直保留在程序中，不会自动删除。如果有大量这种检查，程序运行会相当慢
//        if(n<0) throw new IllegalArgumentException("x < 0");
        //assert 条件;         assert 条件:表达式;    如果结果为false，抛出AssertionError错误。第二种形式附带消息字符串
//        assert n>=0;
        ClassLoader.getSystemClassLoader().setDefaultAssertionStatus(true);//启用断言
        ClassLoader.getSystemClassLoader().setClassAssertionStatus("AssertTest",true);
        ClassLoader.getSystemClassLoader().setPackageAssertionStatus("java01",true);
        assert n>0:n;
        int i = 1 / n;
        double sqrt = Math.sqrt(n);
        System.out.println(sqrt);
        //javac -encoding UTF-8 java01/AssertTest.java
        //java -enableassertions  java01/AssertTest          断言默认关闭，-enableassertions启用断言，没有类加载器的类需要-esa启用
        //断言只应该用于在测试阶段确定程序内部的错误位置。相当于一个前置条件，否则会抛出一个异常。
    }
}
